package javase.javase01.exercise07;

import java.io.*;

/**
 * @author: Gan
 * @date 2021/4/19 0019 18:34
 * @description:
 * 设计一个方法
 * public static void decodeFile(File decodingFile, File decodedFile);
 * 在这个方法中把decodingFile的内容进行解密，然后保存到decodedFile文件中。
 * 解密算法：
 * 数字：
 * 如果不是0的数字，在原来的基础上减1，比如6变成5, 4变成3
 * 如果是0的数字，变成9
 * 字母字符：
 * 如果是非a字符，向左移动一个，比如e变成d, H变成G
 * 如果是a，a->z, A-Z。
 * 字符需要保留大小写
 * 非字母字符：
 * 比如',&^ 保留不变，中文也保留不变
 **/
public class Day18Work3 {
    public static void main(String[] args) throws IOException {
        //原来待解码文件
        File decodingFile = new File("b.txt");
        //解码后的文件
        File decodedFile = new File("c.txt");
        decodeFile( decodingFile, decodedFile);
    }

    private static void decodeFile(File decodingFile, File decodedFile) throws IOException {
        BufferedReader reader = new BufferedReader(new FileReader(decodingFile));
        BufferedWriter writer = new BufferedWriter(new FileWriter(decodedFile));
        String s;
        while ((s = reader.readLine())!=null){
            char[] ch = s.toCharArray();
            for (int i = 0; i < ch.length; i++) {
                if (ch[i] > '0' && ch[i] <= '9'){
                    ch[i] = (char) (ch[i]-1);
                    writer.write(ch[i]);
                } else if (ch[i] == '0'){
                    ch[i] = '9';
                    writer.write(ch[i]);
                } else if (ch[i] > 'a' && ch[i] <= 'z'){
                    ch[i] = (char) (ch[i] - 1);
                    writer.write(ch[i]);
                } else if (ch[i] == 'a'){
                    ch[i] = 'z';
                    writer.write(ch[i]);
                } else if (ch[i] > 'A' && ch[i] <= 'Z'){
                    ch[i] = (char) (ch[i] - 1);
                    writer.write(ch[i]);
                } else if (ch[i] == 'A'){
                    ch[i] = 'Z';
                    writer.write(ch[i]);
                }else{
                    //非英文与数字直接写入b文件中
                    writer.write(ch[i]);
                }
            }

        }
        reader.close();
        writer.close();
    }
}
